package cn.hy.completable.案例.组合式异步编程;

import java.util.concurrent.CompletableFuture;

/**
 * @author zhaomu
 * 通过编程方式完成一个Future任务的执行（即以手工设定异步操作结果的方式）。
 * 应对Future的完成时间（即当Future的完成时间完成时会收到通知，并能使用Future的计算结果进行下一步的的操作，不只是简单地阻塞等待操作的结果）
 */
public class Demo04 {

    public static void main(String[] args) {
        CompletableFuture.supplyAsync(() -> 1)
                .whenComplete((result, error) -> {
                    System.out.println(result);
                    if(error != null) {
                        error.printStackTrace();
                    }
                })
                .handle((result, error) -> {
                    System.out.println("handle: " + result);
                    System.out.println("error: " + error);
                    error.printStackTrace();
                    return error;
                })
                .thenApply(Object::toString)
                .thenApply(Integer::valueOf)
                .thenAccept((param) -> System.out.println("done"));
    }
}
